package thesis;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream.GetField;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;

import org.bson.types.ObjectId;

import UI.VisualizationStoredFrame;

import com.aliasi.tokenizer.PorterStemmerTokenizerFactory;
import com.aliasi.tokenizer.Tokenizer;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.WriteResult;


@SuppressWarnings("unused")
public class Tests {
	private static final String MONGODBHOST = "sensorium-66.ics.uci.edu";
	private static final int MONGODBPORT = 27017;
	private static Mongo m = null;
	private static final String INPUTDB = "sandy";
	private static final String INPUTCOLL = "first";
	private static final String OUTPUTDB = "FSModule";
	private static final String TWEETSCOLL = "TweetsInfo";
	private static final String CLUSTCOLL = "Clusters";
	private static final String CLASSIFIERDB = "Classifier";

	private static final String SAVRESDB = "Results";
	private static final String SUMMCOLL = "Summary_";
	private static final String STATSCOLL = "Statistics";
	
//	//TEST: FilteringAlgorithm
//	public static void main(String[] args) {
//		BufferedReader br=null;
//		try {
//			br = new BufferedReader(new FileReader("FilteringAlgorithmTest.txt"));
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//			System.exit(-1);
//		}
//		
//		try {
//			while (br.ready()){
//				String text = br.readLine();
//			
//				System.out.println(text);
//				FilteringAlgorithm fAlg = new FilteringAlgorithm();
//				String preprocText = fAlg.filter(text);
//				if (preprocText == null){
//					System.out.println("Filtered");
//				}
//				
//				System.out.println(preprocText);
//				System.out.println();
//			}
//		} catch (IOException e) {
//			e.printStackTrace();
//			System.exit(-1);
//		}
//	}
	
	
//	//TEST: TweetInfoExtractor
//	public static void main(String[] args){
//		try{
//			m = new Mongo(MONGODBHOST, MONGODBPORT);
//		} catch (UnknownHostException e){
//			e.printStackTrace();
//			System.exit(-1);
//		}
//		
//		DB db = m.getDB(INPUTDB);
//		
//		DBCollection c = db.getCollection(INPUTCOLL);	
//		
//		DBObject query = new BasicDBObject();
//		
//		ObjectId objId = new ObjectId("508adf18e4b022e38ae5c4c0");
//		
//		query.put("_id", objId);
//		
//		DBCursor cursor = c.find(query);
//		
//		DBObject tweet = cursor.next();
//		
//		TweetInfoExtractor infoExtr = new TweetInfoExtractor(tweet);
//		
//		System.out.println(infoExtr.getId());
//		
//		System.out.println(infoExtr.getText());
//		
//		System.out.println(infoExtr.containUrls());
//		
//		System.out.println(infoExtr.getUserListedCount());
//		
//		System.out.println(infoExtr.getCoordinates());
//		
//		System.out.println(infoExtr.getLatitude());
//		
//		System.out.println(infoExtr.getLongitude());
//		
//		System.out.println();
//	
//		query = new BasicDBObject();
//		
//		objId = new ObjectId("508adf17e4b022e38ae5c4bf");
//		
//		query.put("_id", objId);
//		
//		cursor = c.find(query);
//		
//		tweet = cursor.next();
//		
//		infoExtr = new TweetInfoExtractor(tweet);
//		
//		System.out.println(infoExtr.getId());
//		
//		System.out.println(infoExtr.getText());
//		
//		System.out.println(infoExtr.containUrls());
//		
//		System.out.println(infoExtr.getUserListedCount());
//		
//		System.out.println(infoExtr.getCoordinates());
//		
//		System.out.println(infoExtr.getLatitude());
//		
//		System.out.println(infoExtr.getLongitude());
//		
//		System.out.println();
//		
//		query = new BasicDBObject();
//		
//		objId = new ObjectId("508adf1ae4b022e38ae5c52a");
//		
//		query.put("_id", objId);
//		
//		cursor = c.find(query);
//		
//		tweet = cursor.next();
//		
//		infoExtr = new TweetInfoExtractor(tweet);
//		
//		System.out.println(infoExtr.getId());
//		
//		System.out.println(infoExtr.getText());
//		
//		System.out.println(infoExtr.containUrls());
//		
//		System.out.println(infoExtr.getUserListedCount());
//		
//		System.out.println(infoExtr.getCoordinates());
//		
//		System.out.println(infoExtr.getLatitude());
//		
//		System.out.println(infoExtr.getLongitude());
//		
//		System.out.println();
//	}
	
	
//	//TEST: UserListedCount
//	public static void main(String[] args){
//		int maxUserListedCount = 0;
//		int avgUserListedCount = 0;
//		int greaterThan10 = 0;
//		int greaterThan30 = 0;
//		int greaterThan50 = 0;
//		int greaterThan100 = 0;
//		int greaterThan200 = 0;
//		int greaterThan1000 = 0;
//		int experimentDimension = 500000;
//		
//		try{
//			m = new Mongo(MONGODBHOST, MONGODBPORT);
//		} catch (UnknownHostException e){
//			e.printStackTrace();
//			System.exit(-1);
//		}
//		
//		DB db = m.getDB(INPUTDB);
//		
//		DBCollection c = db.getCollection(INPUTCOLL);	
//		
//		DBCursor cursor = c.find().limit(experimentDimension);
//		
//		while(cursor.hasNext()){
//			DBObject tweet = cursor.next();
//			
//			TweetInfoExtractor infoExtr = new TweetInfoExtractor(tweet);
//			
//			int userListedCount = infoExtr.getUserListedCount();
//			
//			if (userListedCount > maxUserListedCount){
//				maxUserListedCount = userListedCount;
//			}
//			
//			if (userListedCount>10){
//				greaterThan10++;
//				if (userListedCount>30){
//					greaterThan30++;
//					if (userListedCount>50){
//						greaterThan50++;
//						if(userListedCount>100){
//							greaterThan100++;
//							if(userListedCount>200){
//								greaterThan200++;
//								if(userListedCount>1000){
//									greaterThan1000++;
//								}
//							}
//						}
//					}
//				}
//			}
//			
//			avgUserListedCount += userListedCount;
//		}
//		
//		avgUserListedCount = avgUserListedCount / experimentDimension;
//		
//		System.out.println("MAX UserListedCount = " + maxUserListedCount);
//		
//		System.out.println("AVG UserListedCount = " + avgUserListedCount);
//		
//		System.out.println("UserListedCounts greater than 10 = " + greaterThan10);
//		System.out.println("UserListedCounts greater than 30 = " + greaterThan30);
//		System.out.println("UserListedCounts greater than 50 = " + greaterThan50);
//		System.out.println("UserListedCounts greater than 100 = " + greaterThan100);
//		System.out.println("UserListedCounts greater than 200 = " + greaterThan200);
//		System.out.println("UserListedCounts greater than 1000 = " + greaterThan1000);
//	}
	
	
//	//TEST: LocationManager
//	public static void main(String[] args){
//		try{
//			m = new Mongo(MONGODBHOST, MONGODBPORT);
//		} catch (UnknownHostException e){
//			e.printStackTrace();
//			System.exit(-1);
//		}
//		
//		DB db = m.getDB(INPUTDB);
//		
//		DBCollection c = db.getCollection(INPUTCOLL);	
//		
//		DBCursor tweets = c.find().limit(10000);
//		
//		LocationManager lMng = new LocationManager();
//		
//		here : while (tweets.hasNext()){
//			DBObject tweet = tweets.next();
//			
//			TweetInfoExtractor infoExtr = new TweetInfoExtractor(tweet);
//			
//			if(infoExtr.getCoordinates() != null){
//				double latitude = infoExtr.getLatitude();
//				double longitude = infoExtr.getLongitude();
//				
//				System.out.println("Lat: " + latitude + "; Lon: " + longitude);
//				
//				if(lMng.isInsideAreaOfEvent(latitude, longitude)){
//					String locationCategory = lMng.categorize(latitude, longitude);
//					
//					System.out.println(locationCategory);
//				}
//				else{
//					System.out.println("OUT OF AREA");
//				}
//				
//				System.out.println();
//			}
//		}
//	}

	
//	//TEST: ClusteringAlgorithm
//	public static void main(String[] args){
//		try{
//			m = new Mongo();
//		} catch (UnknownHostException e){
//			e.printStackTrace();
//			System.exit(-1);
//		}
//		
//		DB db = m.getDB(OUTPUTDB);
//		
//		DBCollection c = db.getCollection(CLUSTCOLL);	
//		
//		for (int i=1; i<=10; i++){
//			String clusterId = "clus" + i;
//			
//			DBObject query = new BasicDBObject();
//			query.put("cluster", clusterId);
//			
//			DBCursor tweets = c.find(query);
//			
//			System.out.println(clusterId + ": " + tweets.size());
//		}
//			
//	}
	
	
//	//TEST: TextFiltering
//	public static void main(String[] args){
//		try{
//			m = new Mongo(MONGODBHOST, MONGODBPORT);
//		} catch (UnknownHostException e){
//			e.printStackTrace();
//			System.exit(-1);
//		}
//		
//		DB db = m.getDB(INPUTDB);
//		DBCollection c = db.getCollection(INPUTCOLL);	
//		
//		DBCursor tweets = c.find().limit(500);
//		
//		while(tweets.hasNext()){
//			DBObject tweet = tweets.next();
//			
//			TweetInfoExtractor infoExtr = new TweetInfoExtractor(tweet);
//			
//			String text = infoExtr.getText();
//			System.out.println(text);
//			
//			String newFilterText = text;
//			for (int i=0; i<newFilterText.length(); i++){
//				char k = newFilterText.charAt(i);
//				if(k != '\'' && k != ':' && k != '@' && k != '#' && k != ')' && k != '(' && k != ';' && k != '-' && k != '/' && k != '_')
//					if (Character.getNumericValue(k) == -1){
//						newFilterText = newFilterText.substring(0, i) + " " + newFilterText.substring(i+1, newFilterText.length());
//					}
//			}
//			System.out.println(newFilterText);
//			
//			FilteringAlgorithm fAlg = new FilteringAlgorithm();
//			LocationManager lMng = new LocationManager();
//			
//			String oldFilterText = fAlg.filter(tweet, lMng);
//			System.out.println(oldFilterText);
//			
//			System.out.println();
//		}
//	}
	
	
//	//UTILITY: Count
//	public static void main(String args[]){
//		try{
//			m = new Mongo(MONGODBHOST, MONGODBPORT);
//		} catch (UnknownHostException e){
//			e.printStackTrace();
//			System.exit(-1);
//		}
//		
//		long begin_timestamp = (new GregorianCalendar(2012, 9, 30, 17, 45)).getTimeInMillis();
//		long end_timestamp = (new GregorianCalendar(2012, 9, 30, 18, 45)).getTimeInMillis();
//		
//		DB db = m.getDB(INPUTDB);
//		DBCollection c = db.getCollection(INPUTCOLL);
//		
//		DBObject query = new BasicDBObject();
//		
//		query.put("header.tweet_time", new BasicDBObject("$gte", "" + begin_timestamp).append("$lte", "" + end_timestamp));
//		
//		DBCursor cursor = c.find(query);
//		
//		System.out.println(cursor.count());	
//	}
	
	
//	//TEST: RegEx
//	public static void main(String args[]){
//		try{
//			m = new Mongo(MONGODBHOST, MONGODBPORT);
//		} catch (UnknownHostException e){
//			e.printStackTrace();
//			System.exit(-1);
//		}
//		
//		DB db = m.getDB(INPUTDB);
//		DBCollection c = db.getCollection(INPUTCOLL);
//		
//		DBCursor cursor = c.find().limit(100000);
//		while (cursor.hasNext()){
//			DBObject tweet = cursor.next();
//			
//			InputTweetInfoExtractor infoExtr = new InputTweetInfoExtractor(tweet);
//			String text = infoExtr.getText();
//			
//			String regex = ".*((in)|(at)|(on)|(In)|(At)|(On))+(\\s[0-9]*)*\\s(([A-Z][a-z]* )|([0-9]+[a-z]* ))+((St)|(Street)|(Road)|(Rd)|(Boulevard)|(Blvd)|(Plaza)|(Plz)|(Alley)|(Aly)|(Gateway)|(Gtwy)|(Parkway)|(Pkwy)|(Avenue)|(Ave)|(Hwy)|(Highway))(( .*)|(\\z))";
//			
//			if(text.matches(regex)){
//				System.out.println(text);
//			}
//			
//		}
//		String address = "I live on 15 54th Road Irvine";
//		String regex = ".*((in)|(at)|(on)|(In)|(At)|(On))+(\\s[0-9]*)*\\s(([A-Z][a-z]* )|([0-9]+[a-z]* ))+((St)|(Street)|(Road)|(Rd)|(Boulevard)|(Blvd)|(Plaza)|(Plz)|(Alley)|(Aly)|(Gateway)|(Gtwy)|(Parkway)|(Pkwy)|(Avenue)|(Ave)|(Hwy)|(Highway))(( .*)|(\\z))";
//		
//		if(address.matches(regex)){
//			System.out.println(address);
//		}
//	}
	
	
//	//TEST: WordsTokenizer & WordsTokenizerFactory
//	public static void main(String args[]){
//		List<String> featureWords = new ArrayList<String>();
//		featureWords.add("ciao");
//		featureWords.add("bella");
//		
//		String s = "ciao gsrg ddgk bella gr";
//		
//		WordsTokenizerFactory tf = new WordsTokenizerFactory(featureWords);
//		
//		Tokenizer tokenizer = tf.tokenizer(s.toCharArray(), 0, s.length());
//		
//		String next = tokenizer.nextToken();
//		while (next != null){
//			System.out.println(next);
//			
//			next = tokenizer.nextToken();
//		}
//	}
	
//	//TEST: ClassifiersFromBBCDataset
//	public static void main(String args[]){
//		//QualityCalculator.getTrainedClassifierFromBBCNewsDataset("Business");
//		
//		//QualityCalculator.getTrainedClassifierFromBBCNewsDataset("Entertainment");
//		
//		//QualityCalculator.getTrainedClassifierFromBBCNewsDataset("Politics");
//		
//		//QualityCalculator.getTrainedClassifierFromBBCNewsDataset("Sport");
//		
//		//QualityCalculator.getTrainedClassifierFromBBCNewsDataset("Tech");
//	}	
	
	//UTILITY: VisulizationStoredFrame
	public static void main(String args[]){
		VisualizationStoredFrame f = new VisualizationStoredFrame(26);
		
		f.setVisible(true);
	}

	
}
